package com.zbkj.front.service;

import com.github.pagehelper.PageInfo;
import com.zbkj.common.model.project.ProjectInfo;
import com.zbkj.common.model.project.ProjectInformation;
import com.zbkj.common.model.project.ProjectParamGuo;
import com.zbkj.common.model.project.ProjectParamJun;
import com.zbkj.common.model.standard.PeProjectStandard;
import com.zbkj.common.model.user.User;
import com.zbkj.common.request.enquiry.ReportRequest;
import com.zbkj.common.request.project.ClientProjectDownloadRequest;
import com.zbkj.common.request.project.ClientProjectQueryRequest;
import com.zbkj.common.request.project.ClientProjectRequest;
import com.zbkj.common.request.project.ProjectDeliveryRequest;
import com.zbkj.common.request.standard.AddProjectStandardRequest;
import com.zbkj.common.response.UploadResponse;
import com.zbkj.common.response.project.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * @Auther:
 * @Date: 2024/9/12 15:42
 * @Description:
 */
public interface ProjectV2HandlerService {
    PageInfo<ClientProjectInfoResponse> projectList(ClientProjectQueryRequest queryRequest);

    UploadResponse informationUpload(Integer type, MultipartFile file);

    void createProjectBak(ClientProjectRequest projectRequest);

    void resubmitProject(ClientProjectRequest projectRequest);

    /**
     * 项目创建|修改保存处理
     * @param user
     * @param projectInfo
     * @param informationList
     * @param paramGuo 国标参数因子
     * @param paramJun 军标参数因子
     */
    void pojectSaveHandle(User user, ProjectInfo projectInfo, List<ProjectInformation> informationList, ProjectParamGuo paramGuo, ProjectParamJun paramJun);

    void pojectSaveHandle(User user, ProjectInfo projectInfo, List<ProjectInformation> informationList, List<PeProjectStandard> projectStandardLs);

    ClientProjectInfoResponse getProjectInfo(Long projectId);

    void delProject(Long projectId);

    EstimateRestProjectResponse getEstimateResult(Long projectId);

    void reportApply(Long projectId);

    void estimateFileDownload(ClientProjectDownloadRequest downloadRequest, HttpServletResponse response);

    void estimateFunFileDownload(Long projectId,HttpServletResponse response);

    ProjectInfo getProjectAndCheck(Long projectId, Long userId);

    boolean submitDelivery(Long projectId, ProjectDeliveryRequest queryRequest);

    DeliveryInfoResponse getDeliveryInfo(Long projectId);

    void submitAIHistory();

    AiReportResponse aiReport(ReportRequest reportRequest);

    void createProject(ClientProjectRequest projectRequest);

    List<PeProjectStandard> projectStandardReqToPojo(List<AddProjectStandardRequest> addProjectStandardRequestList);

    List<ProjectTypeStatisticsResponse> projectTypeStatistics(Long projectId);
}
